在phantomjs上找不到元素但在铬上工作正常

时间:2016-11-23 13:16:41

标签: selenium automation phantomjs headless-browser

我正在使用phantomjs1.1.0phantomjs-2.1.1.exe windows

CONTINUE ACTIVATED

这是HTML代码

<div class="right-align" style="display: inline-block; vertical-align: middle; border-radius: 6px; margin-left: 20px; flex-grow: 100;">
<div>
<a class="t-next-pd continue-to-query button-text" style="background-color: rgb(11, 197, 216); color: rgb(255, 255, 255); height: 40px; padding: 0px 16px; text-decoration: none; display: inline-flex; font-weight: 500; font-size: 16px; border-radius: 4px; z-index: 100; cursor: pointer; align-items: center; justify-content: center; border: 1px solid rgb(11, 197, 216); width: 100%;">
<span style="display: inline-block;">CONTINUE</span>
</a>
</div>
</div>

我试图使用

找到元素
  1. 两个类的相对xpath:.//*[@class='t-next-pd continue-to-query button-text'].//*[@class='right-align']
  2. 按文字
  3. by partial text
  4. 链接
  5. by cssSelector
  6. 带文字的相对xpath
  7. 绝对xpath(最后优先级)
  8. 按ClassName
  9. javascript executor
  10. 隐含等待和显式等待
  11. 没有看上去工作

    当我输入姓名和年龄时,仅会激活CONTINUE按钮。 这是未激活CONTINUE按钮时的代码。

    <div class="right-align" style="display: inline-block; vertical-align: middle; border-radius: 6px; margin-left: 20px; flex-grow: 100;">
    <div>
    <a class="button-text" disabled="" style="background-color: rgb(199, 199, 199); color: rgb(255, 255, 255); height: 40px; padding: 0px 16px; display: inline-flex; text-decoration: none; font-weight: 500; font-size: 16px; border-radius: 4px; z-index: 100; cursor: pointer; align-items: center; justify-content: center; width: 100%;">
    <span style="display: inline-block;">CONTINUE</span>
    </a>
    </div>
    </div>
    

    CONTINUE DEACTIVATED

1 个答案:

答案 0 :(得分:0)

填写详细信息后等待一秒钟。 PhantomJS立即搜索激活的继续按钮。这很可能是一个时间问题。 “继续”按钮可能需要500毫秒到1秒才能激活。

因此,当PhantomJS开始搜索激活的按钮时,它无法找到它,因为如果DOM尚未存在。

如果您正在使用Python,请使用time.sleep(2)。它暂停了2秒钟。这使DOM有时间将未激活的代码更改为激活的代码。

我使用此a.t-next-pd.continue-to-query.button-text来查找激活的按钮。这是一个CSS选择器,它在我的测试用例中运行良好:)

将其转换为您正在使用的语言。我正在使用Python: -

# code
# to
# fill the form
time.sleep(2)
driver.find_element_by_css_selector('a.t-next-pd.continue-to-query.button-text')