Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 处理具有相同URL的两个不同页面_Php_Url_Selenium - Fatal编程技术网

Php 处理具有相同URL的两个不同页面

Php 处理具有相同URL的两个不同页面,php,url,selenium,Php,Url,Selenium,我正在开发一个使用Selenium自动登录站点的程序。在某些情况下,如果网站不记得浏览器,它会要求你在进入密码页面之前回答一个秘密问题。最初,我认为我应该使用If语句来处理这个问题,该语句将当前URL与我知道的在指向机密问题页面时生成的特定URL进行检查。我遇到的问题是,机密问题页面的URL和密码页面的URL是相同的。在这种情况下,有没有办法通过URL来区分这两个页面,或者我需要找到一种替代方法?如果URL完全相同,您将不会有任何差异进行比较,因此您将无法根据URL来判断页面内容 通常,一个页面

我正在开发一个使用Selenium自动登录站点的程序。在某些情况下,如果网站不记得浏览器,它会要求你在进入密码页面之前回答一个秘密问题。最初,我认为我应该使用
If
语句来处理这个问题,该语句将当前URL与我知道的在指向机密问题页面时生成的特定URL进行检查。我遇到的问题是,机密问题页面的URL和密码页面的URL是相同的。在这种情况下,有没有办法通过URL来区分这两个页面,或者我需要找到一种替代方法?

如果URL完全相同,您将不会有任何差异进行比较,因此您将无法根据URL来判断页面内容

通常,一个页面和一个URL显示不同的内容,这是由Selenium看不到的后端代码决定的。您需要比较两个页面之间不同的内容,例如仅在一个页面上显示的元素

假设您不关心是否显示密码或机密问题,您只希望Selenium完成登录过程,一个简单的解决方案是使用if/else语句检查出现的表单,然后尝试填写出现的表单

if ($this->isElementPresent($password_form)) {
    // enter the password;
} elseif ($this->isElementPresent($secret_question)) {
    // answer the secret question;
} else {
    throw new Exception('Could not find password form or secret question on the login page. [url]');
}

实际的表单元素很可能对每个表单具有不同的ID或名称,您可以使用这些ID或名称进行标识,或者密码/秘密答案的输入将具有不同的名称。(如果所有其他操作都失败了,您可以在页面上查找说明是输入密码还是密码问题的文本。)

Waaiit a miiiute。你完全搞错了

在编写测试时,对于相同的输入,您应该有一个明确定义的(预期的)输出/行为

因此,在您的情况下,您应该有两个测试:

  • 执行所有使应用程序忘记浏览器所需的操作(清除cookies、更改浏览器签名等),并检查您是否获得“机密问题”页面
  • 执行所有必要的操作,确保您的请求代表已知的浏览器,并检查您是否在登录页面上
差不多

testLogin_unknownBrowser_showsSecretQuestion:
    ->clearCookies
    ->findElement(byId 'secretQuestion')

testLogin_knownBrowser_showsLogin:
    ->setCookies
    ->findElement(byId 'username')
    ->findElement(byId 'password')
在这一点上,如果您的某个测试失败,就很容易找出问题所在

理想情况下,你不包括任何魔术,并保持你的测试尽可能清晰


你可能想在BaseTestCase中抽象出“尽一切努力登录”,并在多种情况下使用它,当你只想登录和测试其他东西时,而不需要不断解决“我得到了什么屏幕”的问题。

如果URL完全相同,那么你怎么能区分呢?哈哈,这就是我想要弄清楚的。我以前从未见过这种情况(我也从未密切关注过)。我想我可能运气不好,但我想在放弃之前我会试试这里。只要做一个php if语句并从url获取一个变量?url中的一个变量表示X将仅在同一页面上为X生成视图,如果是Y,则显示Y页面。例如,都是从index.php调用的。您必须在响应正文中查找关键字或句子,该关键字或句子仅包含在自定义标题、cookie、$\u GET、本地存储等中。。。