代码:
cartNumOptionElemList = driver.find_elements_by_xpath(‘//ul[@class=”dropdown-menu”]/li[@role=”option”]’)
cartNumOptionCount = len(cartNumOptionElemList)
logging.debug(“cartNumOptionElemList=%s,cartNumOptionCount=%s”, cartNumOptionElemList, cartNumOptionCount)
# toSelectNum = toProcessInfoDict[“orderNumber”]
toSelectNum = cartNumOptionCount
if cartNumOptionCount > toProcessInfoDict[“orderNumber”]:
logging.debug(“Current Cart select max number %s > remain buy number %s, so only need select %s”,
cartNumOptionCount, toProcessInfoDict[“orderNumber”], toProcessInfoDict[“orderNumber”])
toSelectNum = toProcessInfoDict[“orderNumber”]
logging.info(“Found cart number drop down list”)
toSelectIdx = toSelectNum – 1
carNumSelectElem = cartNumOptionElemList[toSelectIdx]
logging.debug(“carNumSelectElem=%s”, carNumSelectElem)
carNumSelectElem.click()
log:
carNumSelectElem.click()
File “/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/webelement.py”, line 80, in click
self._execute(Command.CLICK_ELEMENT)
File “/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/webelement.py”, line 501, in _execute
return self._parent.execute(command, params)
File “/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py”, line 308, in execute
self.error_handler.check_response(response)
File “/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.py”, line 194, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotVisibleException: Message: element not visible
(Session info: chrome=63.0.3239.84)
(Driver info: chromedriver=2.33.506106 (8a06c39c4582fbfbab6966dbb1c38a9173bfb1a2),platform=Mac OS X 10.13.2 x86_64)
想要:鼠标滚动到可选择列表的底部
(然后再去点击)
很明显是还不可见就点击所以报错。
selenium.common.exceptions.ElementNotVisibleException Message element not visible
python selenium自动化(三)Chrome Webdriver的兼容 – harolei – 博客园
selenium.common.exceptions.ElementNotVisibleException: Message: element not visible处理方法:selenium针对下拉菜单事件的处理 – 波比12 – 博客园
selenium.common.exceptions.ElementNotVisibleException: Message: element not visible using Chrome browser 53 and Chrome driver 2.24 and Selenium 2.53.1 · Issue #2867 · SeleniumHQ/selenium
selenium Message element not visible how scroll
selenium how scroll to option list
selenium – How to perform a scroll in a drop down list to hidden element? – Stack Overflow
selenium scroll drop down list
Handling Dropdowns | Selenium Cooked With Python and Spiced With Java
selenium scroll
How to scroll web page UP or Down using Selenium WebDriver? | Cloud Testing Tools, Ideas and Tips
Multiple Ways to Scroll a Page Using Selenium WebDriver – The Official 360logica Blog
Page scroll up or down in Selenium WebDriver (Selenium 2) using java – Stack Overflow
How to Scroll into view in Selenium Webdriver
selenium python
8. Appendix: Frequently Asked Questions — Selenium Python Bindings 2 documentation
7. WebDriver API — Selenium-Python中文文档 2 documentation
后来继续测试,结果又没法选择滚动去选择最后的30了,因为此时只能选择5个了:
不过暂时对于代码:
toSelectIdx = toSelectNum – 1
carNumSelectElem = cartNumOptionElemList[toSelectIdx]
logging.debug(“carNumSelectElem=%s”, carNumSelectElem)
# if not carNumSelectElem.is_displayed():
logging.info(“to select cart number element MAYBE invisible, now to scroll to visible”)
driver.execute_script(“arguments[0].scrollIntoView(true);”, carNumSelectElem)
去选择5个,是可以工作的:
【后记】
但是发现,更多的时候,对于5个时候,一次性都可以显示的时候:
结果代码都是出错:
<code> carNumSelectElem.click() File "/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/webelement.py", line 80, in click self._execute(Command.CLICK_ELEMENT) File "/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/webelement.py", line 501, in _execute return self._parent.execute(command, params) File "/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 308, in execute self.error_handler.check_response(response) File "/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 194, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.ElementNotVisibleException: Message: element not visible (Session info: chrome=63.0.3239.84) (Driver info: chromedriver=2.33.506106 (8a06c39c4582fbfbab6966dbb1c38a9173bfb1a2),platform=Mac OS X 10.13.2 x86_64) </code>
所以,看来这个办法是有问题的。
或者是需要优化的。
所以暂时还是注释掉代码。
等后续有30个可以选择,需要滚动的时候,再去测试。
【总结】
最后的相关代码是:
<code> # TODO: support directly jump to buy cart page, no review and checkout # after click Review And Checkout then into buy cart # or directly into buy cart page # https://www.microsoft.com/en-us/store/buy/cart inBuyCartPage = WebDriverWait(driver, gCfg["waitTimeout"]).until(EC.url_contains("store/buy/cart")) logging.debug("inBuyCartPage=%s", inBuyCartPage) # if not "store/buy/cart" in driver.current_url: # logging.error("Not found store/buy/cart in url for buy cart page") # break # cartNumBtnElem = WebDriverWait(driver, gCfg["waitTimeout"]).until(EC.presence_of_element_located( # (By.XPATH, '//article[contains(@class, "cart-item-container")]//div[@class="dropdown ember-view"]/div[@tabindex="-1"]/button[contains(@class, "btn cart-btn-dropdown")]'))) itemRowElem = WebDriverWait(driver, gCfg["waitTimeout"]).until(EC.presence_of_element_located( (By.XPATH, '//article[contains(@class, "cart-item-container")]//div/div[contains(@class, "cart-item-details-row")]'))) logging.debug("itemRowElem=%s", itemRowElem) cartNumBtnElem = itemRowElem.find_element_by_xpath('//div[@class="dropdown ember-view"]/div[@tabindex="-1"]/button[contains(@class, "btn cart-btn-dropdown")]') logging.debug("cartNumBtnElem=%s", cartNumBtnElem) logging.info("Found cart number button") cartNumBtnElem.click() logging.info("ACTION: Clicked cart number button to show select buy number") screenshotAndSave("msStore_clickedDropdownList.png") cartNumOptionElemList = itemRowElem.find_elements_by_xpath('//div[@class="dropdown ember-view"]/div[@tabindex="-1"]/ul[@class="dropdown-menu"]/li[@role="option"]') cartNumOptionCount = len(cartNumOptionElemList) logging.debug("cartNumOptionElemList=%s,cartNumOptionCount=%s", cartNumOptionElemList, cartNumOptionCount) # toSelectNum = toProcessInfoDict["orderNumber"] toSelectNum = cartNumOptionCount logging.debug("toSelectNum=%s", toSelectNum) logging.debug("cartNumOptionCount=%s, toProcessInfoDict['orderNumber']=%s", cartNumOptionCount, toProcessInfoDict["orderNumber"]) if cartNumOptionCount > toProcessInfoDict["orderNumber"]: logging.debug("Current Cart select max number %s > remain buy number %s, so only need select %s", cartNumOptionCount, toProcessInfoDict["orderNumber"], toProcessInfoDict["orderNumber"]) toSelectNum = toProcessInfoDict["orderNumber"] logging.debug("updated toSelectNum=%s", toSelectNum) # else: # logging.warn("Current Cart select max number %s < remain buy number %s, so omit for process next loop", # cartNumOptionCount, toProcessInfoDict["orderNumber"]) # break logging.info("Found cart number drop down list") toSelectIdx = toSelectNum - 1 logging.debug("toSelectIdx=%s", toSelectIdx) carNumSelectElem = cartNumOptionElemList[toSelectIdx] logging.debug("carNumSelectElem=%s", carNumSelectElem) # if not carNumSelectElem.is_displayed(): # logging.info("to select cart number element MAYBE invisible, now to scroll to visible") # driver.execute_script("arguments[0].scrollIntoView(true);", carNumSelectElem) # carNumSelectElem = cartNumOptionElemList[toSelectIdx] carNumSelectElem.click() logging.info("ACTION: Clicked cart number drop down list to select %s", toSelectNum) screenshotAndSave("msStore_selectCartNum.png") visibleCheckoutElem = WebDriverWait(driver, gCfg["waitTimeout"] * 2).until(EC.presence_of_element_located( (By.XPATH, '//div[@class="order-summary"]//button[contains(@class, "cli-begin-checkout")]'))) logging.debug("visibleCheckoutElem=%s", visibleCheckoutElem) logging.info("Found visible checkout button") visibleCheckoutElem.click() logging.info("ACTION: Clicked visible checkout button") screenshotAndSave("msStore_afterClickCheckout.png") </code>
转载请注明:在路上 » 【已解决】selenium中点击列表选项出错selenium.common.exceptions.ElementNotVisibleException Message element not visible