【问题标题】:How to click ionic button with PhantomJS and Selenium如何使用 PhantomJS 和 Selenium 单击离子按钮
【发布时间】:2019-06-20 00:51:01
【问题描述】:

我们有第三方供应商需要向我们提供实时数据,但没有任何数据接口。解决方案是将网站数据镜像到我们的系统。他们的网站是用 Ionic 构建的。

我已经创建了镜像数据的功能,我目前的问题是实时数据位于不同的页面上,但 URL 不会仅更改页面的来源。我目前无法获取实时数据,因为我必须点击主页上的实时数据按钮。

我使用 PhantomJS 尝试以编程方式单击按钮,但由于某种原因,它不想工作。用 Google 主页测试了该功能并正常工作。

有谁知道我做错了什么或错过了什么?我已经尝试过 className、tagName 和 dom 中的大多数元素,但仍然没有运气。

这是网站的源代码和我的 PhantomJS 代码。

PS 该网站是一个本地设备界面,我正在使用保存的 HTML 代码进行测试。

网站按钮源

<button class="item item-block item-md" ion-item="" menuclose=""><ion-icon color="primary" item-left="" role="img" class="icon icon-md icon-md-primary ion-md-home item-icon" aria-label="home"></ion-icon><div class="item-inner"><div class="input-wrapper"><!----><ion-label class="label label-md">

                Home
            </ion-label></div><!----></div><div class="button-effect"></div></button><button class="item item-block item-md" ion-item="" menuclose=""><ion-icon color="primary" item-left="" role="img" class="icon icon-md icon-md-primary ion-md-list item-icon" aria-label="list"></ion-icon><div class="item-inner"><div class="input-wrapper"><!----><ion-label class="label label-md">

                Live Data
            </ion-label></div><!----></div><div class="button-effect"></div></button><button class="item item-block item-md" ion-item="" menuclose=""><ion-icon color="primary" item-left="" role="img" class="icon icon-md icon-md-primary ion-md-analytics item-icon" aria-label="analytics"></ion-icon><div class="item-inner"><div class="input-wrapper">

C# PhantomJS 代码:

_driver.Manage().Window.Size = new Size(1000, 800);
_driver.Navigate().GoToUrl(url);
Thread.Sleep(3000);
//get the source of the page
Console.Write(_driver.PageSource);
//fully navigate the dom
var pathElements = _driver.FindElementsByTagName("button");
pathElements[1].Click();

【问题讨论】:

  • 您100%确定您要点击的按钮是页面上的第二个按钮?是否有更具体的选择器可以让您更加确定?按钮是在 HTML 中,还是在初始 HTML 加载后通过 JS 加载?
  • 请更新您的问题以显示从 View Source 检索到的 HTML。

标签: c# selenium xpath phantomjs webdriverwait


【解决方案1】:

要点击文本为Live Data的所需元素,您需要诱导WebDriverWait,您可以使用以下解决方案:

  • XPath:

    new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//button[@class='item item-block item-md']//ion-label[@class='label label-md' and normalize-space()='Live Data']"))).Click();
    

【讨论】:

  • 谢谢,我尝试了这个解决方案,但没有运气,但我认为这是因为 Button 在侧边栏菜单中且不可见。
【解决方案2】:

我使用的是通用的 PhantomJSDriver 和特定的浏览器驱动程序。

使用 ChromeDriver 并在浏览器中打开该网站,它现在正在运行。我能够以编程方式单击该按钮并转到正确的来源。

此外,我尝试按下的按钮位于侧面菜单中,并且不可见。使用了中心的元素之一,这使它起作用。

我确定您可以在不打开浏览器的情况下执行此操作,但目前,这将有助于该功能正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2018-08-22
    • 2021-03-29
    • 1970-01-01
    • 2016-08-27
    • 2019-06-10
    相关资源
    最近更新 更多