好吧,我有以下代码
<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();
总结评论中的内容。每个定位器都有一些不对劲的地方。
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
,因此没有超链接。
在量角器中,这要简单得多,因为您只会说by.buttonText('Search')
你可以通过使用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);
我希望它能适用于您的案件。
注意:确保您的元素是静态的。
正确的 XPath 定位器是:
//button[text()='Search']
如果使用上述查询无法找到它,请确保:
- 按钮不属于和
<iframe>
,如果是这种情况 - 您必须使用 switchTo(( 函数更改上下文 该元素存在于 DOM 中,即页面已完全加载。最好对元素位置/交互使用显式等待,例如:
WebDriverWait wait = new WebDriverWait(driver, 10); wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//button[text()='Search']")));
详细信息:如何使用 Selenium 使用 AJAX 技术测试 Web 应用程序
尝试 这两个希望它有效,
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')")));
如果不起作用,请告诉我,我将提供另一种解决方案。