【问题标题】:How to target input text box using Selenium (for Java) if type of element is <object></object>如果元素类型为 <object></object>,如何使用 Selenium(用于 Java)定位输入文本框
【发布时间】:2020-06-09 21:10:53
【问题描述】:

我正在尝试使用 Selenium 登录特定站点,但是由于这种类型的 html 元素,我无法直接引用密码输入。下面的代码实际上是一个输入文本元素。

<object tabindex="2" class="ocx_style" id="ocx_passwordChar_login" classid="CLSID:123ABCD-34AC-CY23-ABC1-6423F8C40100" codebase="/ocx/APPIE32.cab#version=1,0,0,1" onkeydown="authenticateUser();">
 <param name="maxlength" value="20"/>

(我只是在属性上提供了虚拟值,但格式相同)

这似乎是一个activeX形式。我尝试使用普通的passwd.findElementById("ocx_passwordChar_login");,但它不起作用。

还有哪些其他可能的方法可以直接获得文本框的焦点并能够在其上发送键?一旦你有参考,我还希望能够检查它是否具有价值。

谢谢。

【问题讨论】:

    标签: java selenium element activex ocx


    【解决方案1】:

    您可以尝试不同的选择,例如: 使用 CSS 选择器

    WebElement someElement = driver.findElement(By.cssSelector(".ocx_style")); 
    

    或者, 输入用户名后只需按 TAB 键

    WebElement webElement = driver.findElement(By.xpath("Xpath of UserName"));
    webElement.sendKeys(Keys.TAB);
    

    【讨论】:

    • 第一个解决方案不起作用。它只会专注于输入密码字段,但不会输入任何内容。后一种解决方案目前是通过使用 java.awt 中的 Robot 实现的,然后使用自定义键入机制来模拟来自实际键盘的输入。问题是我们无法检查该密码字段的内容,即使使用 webElement.getAttribute("value") 返回 null。我正在寻找除上述之外是否存在其他解决方案。无论如何,谢谢你的回答。
    • 你能不能试试这个:inputField = driver.findElement(webdriver.By.id('gbqfq')); driver.executeScript("arguments[0].setAttribute('value', '" + longstring +"')", inputField);
    • 顺便说一句,这仍然行不通。该网站使用了一些阻止 selenium 在该网站上工作的 activeX 扩展。
    猜你喜欢
    • 2019-09-06
    • 2015-07-21
    • 2016-10-05
    • 1970-01-01
    • 2019-08-24
    • 2020-05-28
    • 2018-11-12
    • 2019-10-20
    相关资源
    最近更新 更多