gpt4 book ai didi

ajax - Yii、Selenium 和多个提交按钮

转载 作者:行者123 更新时间:2023-12-02 03:47:53 24 4
gpt4 key购买 nike

我有一个带有两个提交按钮的表单,我想使用 Selenium 对其进行测试。

查看:

<?php
$form = $this->beginWidget('CActiveForm', array(
'id' => 'profile-form',
'enableAjaxValidation' => true,
'action' => '',
'clientOptions' => array(
'validateOnSubmit' => true,
'validateOnChange' => true,
'validateOnType' => false,
),
));
?>

<input name="cancel" type="submit" value="Cancel" />
<input name="submit" type="submit" value="Save changes" />

<?php $this->endWidget(); ?>

Controller 没什么特别的,你可以假设它只是打印“你的配置文件已保存”或“你的配置文件未保存”,这取决于它得到的 $_POST['cancel']

测试代码:

<?php
$this->open('/profile_form_url');
$submit_button_selector = 'css=#profile-form input[name="submit"]';
$cancel_button_selector = 'css=#profile-form input[name="cancel"]';

$this->clickAndWait($cancel_button_selector);
$this->assertTextPresent('Your profile was not saved');

$this->open('/profile_form_url');
$this->clickAndWait($submit_button_selector);
$this->assertTextPresent('Your profile has been saved');

问题是代码在浏览器中运行良好,但在 Selenium/Firefox 中运行测试时却不行。运行测试时,它只“看到”第一个按钮(取消),单击“保存更改”具有相同的效果。如果您首先放置保存更改按钮,它将不会“看到”取消按钮。

如果您关闭 enableAjaxValidation,它可以在浏览器和 Selenium 中运行,但我当然希望有一个更优雅的解决方案。例如,在单击“取消”时关闭 AJAX 验证。

不,问题不取决于您为按钮使用哪个定位器(xpath、css、id)。

最佳答案

clickAndWait() 调用 waitForPageToLoad() - ajax 表单验证通常不会触发此事件(除非页面加载),因此您的测试永远不会完成;这可能就是为什么如果您关闭 ajax 验证它会起作用的原因。

您可能想看看 selenium 提供的其他选项(this is an old link to the free phpunit pocket guide 描述了一些其他选项 - 虽然它基于 phpunit 3.1)例如使用 click() 然后使用 waitForCondition() 运行一些 javascript 并在显示新文本时返回 true。

关于ajax - Yii、Selenium 和多个提交按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15687911/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com