无法通过任何对象定位器单击按钮?

时间:2018-05-29 08:56:06

标签: java selenium-webdriver

我正在尝试执行以下Selenium Web驱动程序脚本,但我正在

  

org.openqa.selenium.ElementNotVisibleException:元素不是   目前可见



<span class="button-inner">Login</span>
&#13;
&#13;
&#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();

3 个答案:

答案 0 :(得分:3)

您的定位器存在两个问题。

  1. 您的XPATH //span[@class='button-inner']标识DOM上的两个节点。第一个节点是隐藏的,因此异常ElementNotVisibleExceptiondriver.findElementByClassName("button-inner")

  2. 的情况也是如此
  3. findElementByTagName("[text()='Login']")不正确,因为findElementByTagName只需要标记名称,并且主要用于获取特定标记的元素列表。例如,driver.findElementByTagName(&#34; a&#34;)会为您提供页面上所有链接的列表

  4. <强>解决方案: 使用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,因为文本有更高的机会获得更改。