我有下面的代码
<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();
答案 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']
如果使用上述查询无法找到它,请确保:
<iframe>
,如果属于这种情况-您将不得不使用switchTo() function来更改上下文该元素存在于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')")));
如果不起作用,请通知我,我将提供另一个解决方案。