【发布时间】:2019-04-04 08:29:56
【问题描述】:
我正在尝试单击 web 元素并在其中输入文本。
步骤:
点击游览选项卡。
对搜索字段执行发送键操作。
1.我尝试使用点击搜索框并通过发送键输入文本但无法这样做,之后我执行点击操作并使用 javaScript 发送键但这也不起作用。
- 我为相同的结果编写了不同的 xpath。
//代码如下
public class HandlingDropDown2 {
static WebElement element;
static WebDriver driver;
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
System.setProperty("webdriver.chrome.driver", "Driver/chromedriver.exe");
driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get("https://www.phptravels.net/");
element = driver.findElement(By.xpath("//span[contains(text(),'Tours ')]"));
element.click();
Thread.sleep(2000);
element = driver.findElement(By.xpath("//button[contains(text(),'Got it!')]"));
element.click();
Thread.sleep(2000);
element = driver.findElement(By.xpath("//div[@id='s2id_autogen5']"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", element);
System.out.println("clicked on autogen box");
//element.click();
Thread.sleep(2000);
element = driver.findElement(By.xpath("//div[@class='select2-drop select2-display-none select2-with-searchbox select2-drop-active']"));
JavascriptExecutor executor2 = (JavascriptExecutor)driver;
executor2.executeScript("arguments[0].'value='Test';",element);
//element.sendKeys("test");
}
}
预期结果:用户必须能够通过自动化输入一些文本。
实际结果:无法使用 JavaScript 和简单的 selenium 方法执行 click 和 sendkeys。
【问题讨论】:
-
你得到什么错误?页面是否由 ajax 填充?您不应该使用 Thread.sleep 而是使用 WebDriverWait 。如果您不确定您的 xPath,谷歌浏览器开发者工具允许您轻松复制节点的正确 xpath 表达式。
-
@kilian - 我在线程“main” org.openqa.selenium.NoSuchElementException 中遇到错误异常:没有这样的元素:无法找到元素:{“method”:“xpath”, selector":"//div[@class='select2-drop select2-display-none select2-with-searchbox select2-drop-active']"} (会话信息: chrome=73.0.3683.86) (驱动信息: chromedriver= 2.42.591088
-
我还为 Firefox 使用了 webdriver 元素定位器插件,也为 chrome 浏览器使用了 chrome 路径插件。 xpath 有效,但脚本因“无法定位元素”错误而失败
-
在调查过程中,我发现每当我们单击该元素时,该元素的类名都会动态变化,因此我更喜欢使用 xpath,例如“//div[@id='select2-drop']/ /input[starts-with(@class,'select2-input')]" 解决了我的问题。谢谢@kilin。