如何在Selenium Java Web Driver中选择以下元素?

时间:2019-07-11 02:57:41

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

我有下面的代码

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

我想在硒中找到该元素并执行点击操作。我尝试了几个选项,例如按类,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();

4 个答案:

答案 0 :(得分:0)

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

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

缺少括号,必须为:

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

同时,因为By.className需要单个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,因此也没有超链接。

在量角器中,这要简单得多,因为您只会说by.buttonText('Search')

答案 1 :(得分:0)

您可以使用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);

我希望它能对您的案子起作用。

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

答案 2 :(得分:0)

正确的XPath定位器将是:

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

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

  1. 该按钮不属于<iframe>,如果属于这种情况-您将不得不使用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

答案 3 :(得分:0)

尝试这两个希望它起作用

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')")));

如果不起作用,请通知我,我将提供另一个解决方案。