我有一个选择框,上面有一个事件监听器:
$(document).ready(function () {
$('#edit-era-code-select').change(function() {
$.ajax({
url: Drupal.settings.basePath+'era/js',
type: 'POST',
data: "era_code_select="+$(this).val(),
context: document.body,
success: function(){
window.location.reload(true);
}
});
});
});
在ie / ff / ...中使用它会正常工作 当使用phpunit进行selenium测试时,我可以看到selectbox被更改,但它不会触发jquery事件更改。它只发生在IE中。以下是执行命令的代码:
AbstractSeleniumTestCaseIexplore::loginShib ( $user ['uid'] );
$this->waitForElementPresent("//select[@id='edit-era-code-select']", 30000);
$code = $this->getSelectedLabel("//select[@id='edit-era-code-select']");
if ($code != 3333) {
$this->select("edit-era-code-select", "label=3333");
$this->waitForPageToLoad("30000");
}
...
有人可以帮忙吗?
答案 0 :(得分:9)
我这样解决了。它不是最佳的,但它允许你继续并测试其他东西。
$this->runScript("$('#edit-era-code-select').change()");
答案 1 :(得分:2)
你可以在没有任何黑客攻击的情况下使用它,比如运行可以触发更改事件的脚本。 Selenium从您的代码生成javascript并将其注入浏览器,而不是运行它。但是,如果您通过javascript更改任何选择的选定选项,它将无法正常工作。
我已经做了一些小例子,以便了解(如果您通过手更改选定的选项'更改'事件触发,但不通过javascript。您可以查看可行的示例here):
<select id="someTxt">
<option value="1">Option1</option>
<option value="2">Option2</option>
<option value="3">Option3</option>
</select>
<div id="button">Change selected option via javascript</div>
<script type="text/javascript">
$(document).ready(function(){
$('#someTxt').change(function() {
alert($("#someTxt option:selected").text());
});
$("#button").bind("click", function(){
$("#someTxt option[value='3']").attr('selected', 'selected');
});
});
</script>
所以我认为可以手动触发事件,如:
$this->runScript("$('#edit-era-code-select').change()");
答案 2 :(得分:1)
您应首先设置焦点:
runScript("document.getElementById('selectboxID').focus())
IE浏览器中会出现此问题
答案 3 :(得分:0)
您是否尝试过将按键事件发送到select而不是直接修改值?