PhantomJSDriver接受警报

时间:2015-01-17 00:26:57

标签: java selenium phantomjs

如何在Java中接受使用PhantomJSDriver的警报?我正在尝试与YouTube合作。我无法让它发挥作用。

我尝试使用此代码接受任何驱动程序,但它不适用于PhantomJS。

static void confirmDialog(WebDriver driver) {
    if (driver instanceof PhantomJSDriver) {
        PhantomJSDriver phantom = (PhantomJSDriver) driver;
        phantom.executeScript("window.confirm = function(){return true;}");
        phantom.executeScript("return window.confirm");
    } else driver.switchTo().alert().accept();
}

2 个答案:

答案 0 :(得分:7)

您必须执行JS以将window.alert调用设置为不执行任何操作。您可以使用此方法。

static void confirmDialog(WebDriver driver) {
    if (driver instanceof PhantomJSDriver) {
        PhantomJSDriver phantom = (PhantomJSDriver) driver;
        phantom.executeScript("window.alert = function(){}");
        phantom.executeScript("window.confirm = function(){return true;}");
    } else driver.switchTo().alert().accept();
}

答案 1 :(得分:2)

JavascriptExecutor为我工作。在点击调用警报的事件之前,请务必执行它。

#include <iostream>

class X
{
protected:
    int abc=10;
public:
    X() {};
    ~X() {};
    int getAbc() { return abc; }
};

class Y : public X
{
public:
int abc;
X& x;

    Y(X& x) : x(x) {

};
    ~Y() {};

    void setAbcofY() { this->abc = X::getAbc(); }
};

int main()
{
    X* a = new X();
    Y* b = new Y(*a);
    b->setAbcofY();
    //system("pause");
    std::cout << b->abc << std::endl;
    return 0;
}

注意: - 点击调用警报确认框的事件后不要使用它。 默认情况下,上面的代码将确认框设置为((JavascriptExecutor) driver).executeScript("window.confirm = function(msg) { return true; }"); 表示您接受/点击该页面上所有确认框中的确定(如果被调用)

希望它会对你有所帮助:)。