我正在尝试执行以下Selenium Web驱动程序脚本,但我正在
org.openqa.selenium.ElementNotVisibleException:元素不是 目前可见
<span class="button-inner">Login</span>
&#13;
@Test
public void BrowserInvocation() {
System.setProperty("webdriver.chrome.driver", "C:\\Users\\DOGETHER\\Desktop\\Website\\chromedriver.exe");
@SuppressWarnings("unused")
ChromeDriver driver=new ChromeDriver();
driver.get("http://phasorlab-web-dev.s3-website-us-east-1.amazonaws.com/"); /*Get URL */
driver.manage().timeouts().implicitlyWait(65, TimeUnit.SECONDS);
driver.findElementByXPath("//span[@class='button-inner']").click();
//driver.findElementByClassName("button-inner").click();
//driver.findElementByTagName("[text()='Login']").click();
答案 0 :(得分:3)
您的定位器存在两个问题。
您的XPATH //span[@class='button-inner']
标识DOM上的两个节点。第一个节点是隐藏的,因此异常ElementNotVisibleException
。 driver.findElementByClassName("button-inner")
findElementByTagName("[text()='Login']")
不正确,因为findElementByTagName
只需要标记名称,并且主要用于获取特定标记的元素列表。例如,driver.findElementByTagName(&#34; a&#34;)会为您提供页面上所有链接的列表
<强>解决方案:强>
使用XPATH //span[@class='button-inner' and text()='Login']
唯一标识正确的元素。
或者只是//span[text()='Login']
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//span[text()='Login']")
答案 1 :(得分:-1)
您可以使用显式等待来处理异常,例如如果WebDriver实例是驱动程序。
WebDriverWait wait=new WebDriverWait(driver,//mention the time);
wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(//mention the By locator));
请参阅link以查看明确等待的可用预期条件。
答案 2 :(得分:-1)
文本登录采用大写“LOGIN”。 试试这个: - //跨度[文本()= 'LOGIN'] 正确的方法是使用元素的ID,因为文本有更高的机会获得更改。