我正在尝试针对亚马逊网站编写Selenium测试。我想得到"登录"元素,以便我可以点击它。
url:www.amazon.ca
这是我的Selenium代码:
driver.findElement(By.xpath("//a[@data-nav-role='signin']")).click();
但我得到Element not visible
例外。
我尝试在元素查找之前放置Thread.sleep(5000)
,但仍然存在同样的问题。
我有其他方法可以选择元素,但我想找出为什么这个Xpath在我的代码中不起作用。
注意:在Chrome DevTool控制台中尝试时,它可以在$x("//a[@data-nav-role='signin']")
答案 0 :(得分:2)
您选择的选择器会返回多个元素,即3.您可以使用findElements
代替findElement
来验证。
您可以为要单击的特定元素提供精确的选择器,也可以使用findElements
获取所有匹配的元素,循环浏览它们并单击具有匹配属性的元素,例如:文本。
尝试:
driver.findElement(By.id("nav-link-yourAccount")).click();
答案 1 :(得分:0)
我已经检查了网站,我们需要先将鼠标移到菜单上,然后才能看到登录按钮。下面的代码可能会给你一些想法。
//Mouse over to the menu
Actions action = new Actions(webdriver);
WebElement we = webdriver.findElement(By.xpath("//*[@id=\'nav-link-yourAccount\']/span[1]"));
action.moveToElement(we).build().perform();
//Now perform sign in button clicking action since its visible now
希望这会对你有所帮助。感谢。
答案 2 :(得分:0)
尝试点击xpath:
//一个[@ ID = 'NAV-链路yourAccount'] /跨度