如何按照下面的HTML单击<textarea>?

时间:2018-07-02 23:30:41

标签: java selenium selenium-webdriver xpath css-selectors

我正在处理一个巨大的自动化项目,这是我完成这个项目之前的最后一个问题。我正在使用Selenium在Drupal风格的网站上自动进行更改。到目前为止,我已经能够单击站点上的每个Web元素并与之交互(尤其是一旦我停止使用chrome驱动程序后,无论出于何种原因,它们都无法单击包裹在

标记中的元素? )。无论如何,我最近发现(在使用FireFox壁虎驱动程序时,仅供参考)我无法单击 <代码>
            
            
                
                                         
                                                                      

我已经使用许多不同的方法来查找网络元素,并且可以保证这种方法会产生正确的text-area元素。我什至尝试单击

元素本身,但无济于事。以下方法也失败了:

像这样在Selenium中使用Action库:

  Actions desc = new Actions(driver);
desc.moveToElement(description).click();
动作doIt = desc.build();
doIt.perform();
 

失败:线程“ AWT-EventQueue-0”中的异常org.openqa.selenium.WebDriverException:TypeError:rect未定义

使用Javascript Executor不会执行任何操作,只会滚动到元素。单击只需单击屏幕的右上角。

使用 WebDriverWait 对象超时,因为该元素永远无法及时单击。

我不知道是什么使单击此元素如此困难,但是我想我今天发现了一个线索。我对JQuery(或一般的JS)的工作方式不是专家,但是此脚本位于页面顶部:

  jQuery.extend(Drupal.settings,{“ basePath”:....
 

在相当大的脚本中,只有作为元素的元素ID才附加到称为“触发器”的对象。这是脚本的一部分:

 “触发器”:{
            “ edit-field-office-address-und-0-value”:{
                “ field”:“ edit-field-office-address-und-0-value”,
                “可调整大小”:1,
                “ select”:“ edit-field-office-address-und-0-format--2”,
                “ formatfiltered_html”:{
                    “ editor”:“ ckeditor”,
                    “状态”:1,
                    “切换”:1
                }
            },
            “ edit-body-und-0-value”:{
                “ field”:“ edit-body-und-0-value”,
                “可调整大小”:1,
                “ select”:“ edit-body-und-0-format--2”,
                “ formatfiltered_html”:{
                    “ editor”:“ ckeditor”,
                    “状态”:1,
                    “切换”:1
                }
            },
            “ edit-field-requirements-und-0-value”:{
                “ field”:“ edit-field-requirements-und-0-value”,
                “可调整大小”:1,
                “ select”:“ edit-field-requirements-und-0-format--2”,
                “ formatfiltered_html”:{
                    “ editor”:“ ckeditor”,
                    “状态”:1,
                    “切换”:1
                }
            }
        }
    },
 

我在想Javascript以某种方式弄乱了click选项。也许它会创建格式设置选项,然后使元素看起来不可点击?

我不知道该怎么办,临近最后期限!我们将为您提供帮助,帮助您确定如何单击此文本区域并与之交互!

3 个答案:

答案 0 :(得分:0)

您可以在下面使用try

WebDriverWait wait = new WebDriverWait(driver, 5)
JavascriptExecutor js = ((JavascriptExecutor) driver)

//Present in DOM
wait.until(ExpectedConditions.presenceOfElement(By.id("ID")));

//scroll to view
WebElement element = driver.findElement(By.id("ID")));  
js.executeScript("arguments[0].scrollIntoView(true);", element);

//Click
wait.until(ExpectedConditions.elementToBeClickable(By.id("ID")));

答案 1 :(得分:0)

我之前遇到过类似的问题,即使元素未显示在屏幕上,驱动程序也无法捕获它们(即使它们出现在网页上(您必须上下滚动才能处理它们))。在检查我的项目后,我发现问题是由过时的chrome驱动程序引起的。

这是我建议的解决方案:

  1. 尝试调试,在找到textarea元素之前设置一个断点。当调试执行在您的断点处暂停时,滚动页面以使textarea可见。继续执行。如果仍然遇到问题,则可能必须检查选择器。但是,如果手动滚动干预没有遇到任何问题,则可能是驱动程序/浏览器问题。

  2. 确保您的Chrome驱动程序已更新,并且计算机上已安装Chrome浏览器。 Chrome驱动程序的最新版本通常发布在这里: http://chromedriver.chromium.org/downloads

  3. 如果无法更新驱动程序/浏览器或无法进行更新,作为解决方法,可以尝试在使用“动作”构建器获取元素之前尝试插入上一页或下一页动作。

    < / li>

这是示例代码:

Actions actions = new Actions(driver);
    actions
        .moveToElement(anyVisibleElement)
        .sendKeys(Keys.PAGE_UP)
        .build()
        .perform();

答案 2 :(得分:0)

要单击带有默认文本为的文本区域,具体项目取决于学生的兴趣,背景和完成的课程。。您必须根据需要诱导 WebDriverWait 可点击的元素如下:

  • X = df[['param_a']] y= df[['param_b']]

    cssSelector
  • new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("textarea.text-full.wysiwyg.form-textarea#edit-body-und-0-value>p"))).click();

    xpath