【问题标题】:How can I select below element in Selenium Java Web Driver?如何在 Selenium Java Web Driver 中选择以下元素?
【发布时间】:2019-11-20 16:35:17
【问题描述】:

我有以下代码

<button class="jobs-search-box__submit-button artdeco-button artdeco-button--3 ml2" data-ember-action="" data-ember-action-689="689">Search</button>

我想在 selenium 中找到这个元素并执行点击操作。我尝试了几个选项,例如按类、xpath、名称、文本、包含但没有任何效果。 有人可以在这里指导我吗?

driver.findElement(By.xpath("//button[contains(.,'Search']")).click();
driver.findElement(By.className("jobs-search-box__submit-button artdeco-button artdeco-button--3 ml2")).click();
driver.findElement(By.className("//*[@id=\"ember689\"]/button")).click();
driver.findElement(By.linkText("Search")).click();

【问题讨论】:

标签: java selenium selenium-webdriver automation selenium-chromedriver


【解决方案1】:

总结 cmets 中的内容。每个定位器都有一些问题。

By.xpath("//button[contains(.,'Search']")

缺少括号,需要:

By.xpath("//button[contains(.,'Search')]")

同时,因为 By.className 需要一个类名

By.className("jobs-search-box__submit-button artdeco-button artdeco-button--3 ml2")

也不行。 (见github.com/seleniumhq/selenium/issues/1480 但可以:

By.cssSelector(".jobs-search-box__submit-button.artdeco-button.artdeco-button--3.ml2") 

还有

By.className("//*[@id=\"ember689\"]/button")

指的是未提供的 id(另外,我不确定,但我认为需要通过 xpath)。

By.linkText("Search")

不起作用,因为没有标签a,所以没有超链接。

在 Protractor 中,这要简单得多,因为您只需说 by.buttonText('Search')

【讨论】:

    【解决方案2】:

    您可以使用 javascript 实现相同的目标。请找到以下代码示例:

    //Creating the JavascriptExecutor interface object by Typecasting       
    JavascriptExecutor js = (JavascriptExecutor)driver;
    
    WebElement button =driver.findElement(By.xpath("//button[@class='jobs-search-box__submit-button artdeco-button artdeco-button--3 ml2']"));
    
    //Perform Click on LOGIN button using JavascriptExecutor        
    js.executeScript("arguments[0].click();", button);
    

    我希望它对你的情况有用。

    注意:确保您的元素是静态的。

    【讨论】:

      【解决方案3】:

      正确的 XPath 定位器是:

      //button[text()='Search']
      

      如果您无法使用上述查询找到它,请确保:

      1. 按钮不属于和&lt;iframe&gt;,如果是这种情况 - 您将不得不使用switchTo() function 更改上下文
      2. 元素存在于 DOM 中,即页面已完全加载。最好使用Explicit Wait 进行元素定位/交互,例如:

        WebDriverWait wait = new WebDriverWait(driver, 10);
        wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//button[text()='Search']")));
        

      更多信息:How to use Selenium to test web applications using AJAX technology

      【讨论】:

        【解决方案4】:

        试试这两个希望它有效,

        1.) 使用包含

        WebDriverWait wait = new WebDriverWait(driver, 10);
        wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//button[contains(text(),'Search')]")));
        

        2.) 使用 CSS

        WebDriverWait wait = new WebDriverWait(driver, 10);
        wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("button.jobs-search-box__submit-button artdeco-button artdeco-button--3 ml2")));
        
        WebDriverWait wait = new WebDriverWait(driver, 10);
            wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("button.contains('Search')")));
        

        如果不起作用,请告诉我,我会提供另一个解决方案。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-05-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-17
          • 2021-10-04
          • 1970-01-01
          相关资源
          最近更新 更多