【问题标题】:unable to click on Webelement on web Page无法点击网页上的 Webelement
【发布时间】:2019-04-04 08:29:56
【问题描述】:

我正在尝试单击 web 元素并在其中输入文本。

步骤:

  1. 启动“https://www.phptravels.net/

  2. 点击游览选项卡。

  3. 对搜索字段执行发送键操作。

1.我尝试使用点击搜索框并通过发送键输入文本但无法这样做,之后我执行点击操作并使用 javaScript 发送键但这也不起作用。

  1. 我为相同的结果编写了不同的 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。

标签: java selenium-webdriver


【解决方案1】:

记住 sendKeys 的功能

首先,您的 xPath 是 div 元素,而您尝试在 div 元素中执行 sendKeys 是错误的。如果您观察到有一个名为“按列表或城市名称搜索”的跨度元素。如果你点击那里,那么你的输入元素就会在你可以看到的地方看到 click()sendKeys("")

试试,

// click on below span element to get input visibled,
element = driver.findElement(By.xpath("//span[text()='Search by Listing or City Name']"));
element.click();

然后您的输入元素现在可用,您可以在其中单击和发送键

element = driver.findElement(By.xpath("//div[@id='select2-drop']//input[@class='select2-input'][last()]"));
element.click();
element.sendKeys("test");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 2013-11-17
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    相关资源
    最近更新 更多