【问题标题】:Javascript button click not working in selenium webdriverJavascript按钮单击在selenium webdriver中不起作用
【发布时间】:2019-05-16 01:25:38
【问题描述】:

我正在尝试使用 python 脚本和网络驱动程序自动点击 javscript 按钮,但是无论我如何尝试引用它似乎都不会激活 javscript 的元素。以下是我尝试点击按钮的网站摘录:

<li>
<a href="javascript:;" data-blogid="19079" id="picture-trigger">
<i class="glyphicon glyphicon-picture light-red"></i >
<span> Picture </span >
</a >
</li >

我尝试通过 CSS 选择器、XPATH 进行选择,当我看到元素被选中(运行时用虚线围绕它)时,什么也没有发生。

我也尝试了 .click() 和 .submit() 似乎都没有工作。这是我最近的尝试:

element = mydriver.find_element_by_id("picture-trigger")
element.click()

我认为问题可能出在 javascript:;从 Web 驱动程序调用时不会被触发,就像交互式用户点击它时一样,但我不知道如何自动点击它。

有更多网络驱动程序经验的人知道为什么这不起作用或我怎样才能让它起作用吗?

谢谢 布拉德

这是我在运行代码时看到的:

这是我手动点击按钮时的样子:

【问题讨论】:

  • 嗨.. 我不确定我是否理解,href 操作是 javascript 无操作。您期望观察或发生什么?
  • CSS 选择器和 xpath 是寻址元素的两种不同方式。你想用哪一个?
  • @omidN 我是说我已经尝试了这两种方法(使用 CSS 选择器 xpath),但似乎都无法使用 .click() 或 .submit() .但我可以看到正在选择正确的元素,所以我不明白为什么 .click 或 .submit 不会触发适当的 javascript。
  • @cody 当我以交互方式/手动方式单击元素时,会出现一个新窗口(我认为它实际上是一个
    打开并且页面的其余部分变暗)。但是当我尝试使用 webdriver 自动化它时,什么也没有发生。就好像我没有点击任何东西一样。
  • 澄清它一个div(photobuttonholder)。

标签: javascript python selenium-webdriver xpath css-selectors


【解决方案1】:

我认为问题在于该站点使用的是 jquery。我可以使用以下方法解决此问题:

time.sleep(3);
mydriver.execute_script("$('.light-red').click();")

time.sleep(3);
mydriver.execute_script("$('.uploadbutton').click();")

可能有比使用 time.sleep 更好的方法,但我花了很多时间试图让 div 取消隐藏它现在已经足够好了。

希望这可以帮助遇到类似情况的其他人。感谢大家的帮助。

【讨论】:

    【解决方案2】:

    这是我如何找到使用 XPath 点击元素的方法:

    1. 在按钮所在的目标页面中浏览(尝试使用 火狐)。
    2. 右键单击按钮并选择检查元素。
    3. 右键单击按钮的 HTML 代码并在 Copy 中选择 XPath。
    4. 现在您已将 XPath 复制到剪贴板。

    现在你只需要调用这条线:

    document.getElementByXPath("PASTE THE XPATH HERE").click()
    

    【讨论】:

    • 所以这是python而不是javascript,但转换为等价物是:mydriver.find_element_by_xpath("/html/body/div[2]/section/div/div[18]/div/div[ 2]/div/ul/li[2]/a/i").click() 并且我确实看到我的元素被选中(它周围有一条虚线)但是点击动作似乎没有取消隐藏 photobuttonholder div .所以我的问题。
    • 在进行点击操作之前是否有延迟?可能在发出点击时页面仍在加载。
    • 我尝试使用 WebDriverWait(mydriver, 10) 添加延迟,但似乎没有什么不同。我认为问题在于 javascript:;这对我来说看起来是空的/空的。我不明白那是怎么做的。但是据我所知,这是该元素上或该元素周围的唯一脚本。
    • 尝试在发出 click() 时正确获取屏幕截图(使用 get_screenshot_as_file)
    • 添加截图。
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签