小编Uri*_*Uri的帖子

如何切换到Selenium中的活动选项卡?

我们开发了Chrome扩展程序,我想用Selenium测试我们的扩展程序.我创建了一个测试,但问题是我们的扩展在安装时会打开一个新标签,我想我从另一个标签中得到了一个例外.是否可以切换到我正在测试的活动选项卡?或者另一种选择是从禁用扩展开始,然后登录我们的网站,然后启用扩展.可能吗?这是我的代码:

def login_to_webapp(self):
    self.driver.get(url='http://example.com/logout')
    self.driver.maximize_window()
    self.assertEqual(first="Web Editor", second=self.driver.title)
    action = webdriver.ActionChains(driver=self.driver)
    action.move_to_element(to_element=self.driver.find_element_by_xpath(xpath="//div[@id='header_floater']/div[@class='header_menu']/button[@class='btn_header signature_menu'][text()='My signature']"))
    action.perform()
    self.driver.find_element_by_xpath(xpath="//ul[@id='signature_menu_downlist'][@class='menu_downlist']/li[text()='Log In']").click()
    self.driver.find_element_by_xpath(xpath="//form[@id='atho-form']/div[@class='input']/input[@name='useremail']").send_keys("[email]")
    self.driver.find_element_by_xpath(xpath="//form[@id='atho-form']/div[@class='input']/input[@name='password']").send_keys("[password]")
    self.driver.find_element_by_xpath(xpath="//form[@id='atho-form']/button[@type='submit'][@class='atho-button signin_button'][text()='Sign in']").click()
Run Code Online (Sandbox Code Playgroud)

测试失败ElementNotVisibleException: Message: element not visible,因为在新选项卡中(由扩展名打开)"登录"不可见(我认为新选项卡仅在命令后打开self.driver.get(url='http://example.com/logout')).

更新:我发现该例外与额外标签无关,它来自我们的网站.但根据@ aberna的回答,我用这段代码关闭了额外的标签:

def close_last_tab(self):
    if (len(self.driver.window_handles) == 2):
        self.driver.switch_to.window(window_name=self.driver.window_handles[-1])
        self.driver.close()
        self.driver.switch_to.window(window_name=self.driver.window_handles[0])
Run Code Online (Sandbox Code Playgroud)

关闭额外标签后,我可以在视频中看到我的标签.

python selenium google-chrome-extension

35
推荐指数
4
解决办法
5万
查看次数

我可以在JavaScript的不同for循环中声明两次相同的变量吗?

可能重复:
JavaScript变量范围

我有一个用于HTML选择选项的JavaScript函数:

// Show and hide days according to the selected year and month.
function show_and_hide_days(fp_form) {
    var select_year= $(fp_form).find("select.value_year");
    var select_month= $(fp_form).find("select.value_month");
    var select_day= $(fp_form).find("select.value_day");
    var selected_year= $.parse_int($(select_year).val());
    var selected_month= $.parse_int($(select_month).val());
    var selected_day= $.parse_int($(select_day).val());
    var days_in_month= new Date(selected_year, selected_month, 0).getDate();
    // If the number of days in the selected month is less than 28, change it to 31.
    if (!(days_in_month >= 28))
    {
        days_in_month= 31;
    }
    // If the selected day is bigger than the number of days …
Run Code Online (Sandbox Code Playgroud)

javascript variables var declare

29
推荐指数
2
解决办法
6051
查看次数

我们如何检查我们的应用程序是否已安装用于某些组织而非所有组织?

我们为Google Apps Marketplace创建了一个应用程序.我们的应用程序只有在为每个人安装时才有效.但问题是,有些客户为某些组织而不是每个人安装我们的应用程序.我们希望向这些客户显示特定消息,但问题是我们不知道我们的应用程序是为某些组织安装的,还是根本没有安装.因此,为某些组织安装我们的应用程序的客户会收到一条消息,该消息适用于根本没有安装我们的应用程序的客户.我们向他们展示了安装按钮,但是当他们再次安装我们的应用程序时没有任何反应,因为它已经安装.我们希望向他们提供如何将我们的应用状态更改为"适合所有人"的说明.

我们如何检查是否为某些组织安装了我们的应用程序?我们从Google收到以下错误消息:

Failed to retrieve access token: {
  "error" : "unauthorized_client",
  "error_description" : "Unauthorized client or scope in request."
}
Run Code Online (Sandbox Code Playgroud)

对于没有安装我们的应用程序的cutomers,我们收到的错误消息是相同的.

这是抛出异常的Python函数:

  def _do_refresh_request(self, http_request):
    """Refresh the access_token using the refresh_token.

    Args:
      http_request: callable, a callable that matches the method signature of
        httplib2.Http.request, used to make the refresh request.

    Raises:
      AccessTokenRefreshError: When the refresh fails.
    """
    body = self._generate_refresh_request_body()
    headers = self._generate_refresh_request_headers()

    logger.info('Refreshing access_token')
    resp, content = http_request(
        self.token_uri, method='POST', body=body, headers=headers)
    if resp.status == 200:
      # TODO(jcgregorio) …
Run Code Online (Sandbox Code Playgroud)

python google-apps google-apps-marketplace

25
推荐指数
1
解决办法
834
查看次数

如何使用Xpath选择iframe中的元素?

我想创建一个Selenium测试来测试我们的AOL邮件扩展.我设法登录AOL并撰写了一封电子邮件,但我还需要在编辑器中选择元素,这些元素位于iframe中.我检查了,甚至当编辑器打开时,以下测试失败:

self.assertEqual(first=1, second=len(self.driver.find_elements_by_xpath(xpath="//iframe[@name='editor_body']//body[@contenteditable='true']")))
Run Code Online (Sandbox Code Playgroud)

我收到了错误AssertionError: 1 != 0.如何通过Xpath(或以任何其他方式使用Selenium)选择iframe和其他元素的主体?

python iframe selenium xpath

18
推荐指数
1
解决办法
3万
查看次数

如何在Windows 10上安装ChromeDriver并使用Chrome运行Selenium测试?

我们有一个Ubuntu服务器,用于运行Chrome和Firefox的Selenium测试(我安装了ChromeDriver),我也想在Windows 10计算机上本地运行测试.我想保持两个计算机的Python代码相同.但我没有找到如何在Windows 10上安装ChromeDriver?我没有找到它的文档上[1 ,2] .

以下是在Chrome中运行测试的代码:

import unittest
from selenium import webdriver

class BaseSeleniumTestCase(unittest.TestCase):
    ...
    ...
    ...
    ...

    def start_selenium_webdriver(self, chrome_options=None):
        ...
        self.driver = webdriver.Chrome(chrome_options=chrome_options)
        ...
Run Code Online (Sandbox Code Playgroud)

我还发现了如何在Chrome中运行Selenium WebDriver测试用例?但它似乎不是在Python中(没有标记编程语言,它是什么?)

更新#1:我在https://sites.google.com/a/chromium.org/chromedriver/getting-started中找到了一些Python代码,但是如果我想保留相同的Python,我在哪里将文件放在Windows 10中两台电脑的代码?

更新2:我下载并把chromedriver.exeC:\Windows和它的作品,但我没有看到它的任何地方记录.

python selenium webdriver selenium-chromedriver selenium-webdriver

16
推荐指数
3
解决办法
5万
查看次数

jQuery .hide()在某些浏览器中不起作用

我们使用jQuery .hide()隐藏选择输入中的选项 - 一个月内少于31天.它适用于谷歌Chrome和FireFox,但它在Internet Explorer,Opera和Safari中不起作用.这是我们使用的JavaScript代码:

$(function() {
    // Show and hide days according to the selected year and month.
    function show_and_hide_days(fp_form) {
        var select_year= $(fp_form).find("select.value_year");
        var select_month= $(fp_form).find("select.value_month");
        var select_day= $(fp_form).find("select.value_day");
        var selected_year= parseInt($(select_year).val());
        var selected_month= parseInt($(select_month).val());
        var selected_day= parseInt($(select_day).val());
        var days_in_month= new Date(selected_year, selected_month, 0).getDate();
        if ((days_in_month >= 28))
        {
            // If selected day is bigger than the number of days in the selected month, reduce it to the maximal day in this month.
            if (selected_day > days_in_month)
            { …
Run Code Online (Sandbox Code Playgroud)

javascript jquery show hide

10
推荐指数
2
解决办法
9685
查看次数

是否可以强制网站输入为英文?

我正在用两种语言(英语和希伯来语)创建一个网站(Speedy Net)。我有一个输入字段(“ slug / username”),该字段必须为英语(字母数字拉丁字符)。当我通过手机进入网站时,我可以用希伯来语写文字。是否可以在此输入字段中强制使用英文键盘?我注意到,对于电子邮件地址(电子邮件输入),键盘已经是英文了。

更新:在服务器端,我们确实验证了输入。我不想在客户端(使用JavaScript)上验证输入,也不想阻止用户键入希伯来字符(稍后可能会这样做),但是我想(强制)默认键盘语言为英语。我注意到,对于电子邮件和密码,当将其方向设置为时ltr,键盘的默认语言是英语。但不在slug / username字段上。

我测试的浏览器自动将电子邮件输入验证为英文。您不能在那里使用希伯来语字符。

我进行了搜索,但没有在Stack Overflow或其他地方找到类似的问题。

子段字段可以包含服务器将其转换为破折号的任何非字母数字字符。例如Aa=Bb!1@2#3$4%56,服务器将aa-bb-1-2-3-4-56其转换为,这是Speedy Net上用户的有效子弹。但是,??-??-1-2-3-4-56这不是Speedy Net上的有效子弹。用户不得以至少4个拉丁字母开头。

当页面位于希伯来语时会出现问题。如果页面为英文,则没有问题。

在我的网站上输入名字和姓氏时,用户可以输入任何语言。输入电子邮件地址(电子邮件输入)时,键盘会自动切换为英语(在Galaxy上经过测试)。但是,在输入信息/用户名(在电子邮件地址之后)时,如果在输入电子邮件之前(在Galaxy上)希伯来语位于希伯来语,键盘将切换回希伯来语。这就是我要防止的。

html css django hebrew

10
推荐指数
2
解决办法
353
查看次数

如何使用 npm 安装所有要求?

我想克隆https://github.com/tstringer/create-react-app-with-redux并开始一个新项目。我跑了npm start然后跑npm install了每个不存在的模块,但有很多。有没有办法安装所有要求?类似于pip install -r requirements.txtPython 中的东西。

谢谢,乌里。

node.js reactjs redux create-react-app

7
推荐指数
2
解决办法
1万
查看次数

在使用Selenium进行测试时,如何在Chrome和Firefox中调整窗口大小?

我们为Chrome,Firefox和Safari创建了扩展程序,我们希望使用Selenium测试扩展程序.我们有一个Ubuntu服务器,我在其中安装了Firefox和Chrome(使用ChromeDriver).测试工作正常,但问题是Chrome窗口太小,并且由于窗口的大小,Chrome中的许多测试都失败了.使用Firefox,窗口很好,测试不会失败.如何使窗口尺寸更大?我们希望窗口大小为1920x1080.这是我们的代码:

run_daily_selenium_tests.sh:

#!/bin/bash

cd /home/ubuntu/selenium_tests

sudo Xvfb :99 -ac -screen 0 1920x1080x24 >/dev/null 2>&1 &
export DISPLAY=:99

today_date_hour=`TZ='Asia/Tel_Aviv' date +"%Y-%m-%d_%H"`
start_hour=`TZ='Asia/Tel_Aviv' date +"%H"`
selenium_test_prefix="/home/ubuntu/selenium_tests/tests/"
selenium_test_suffix=".py"
log_prefix="/home/ubuntu/logs/selenium_tests/"

run_selenium_test()
{
    selenium_test_file_name="${selenium_test_prefix}${file_name}${selenium_test_suffix}"
    log_suffix="_${file_name}.log"
    log_file_name="${log_prefix}${today_date_hour}${log_suffix}"
    python "$selenium_test_file_name" >"$log_file_name" 2>&1
    cat "$log_file_name" | mail -s "$test_name - `TZ='Asia/Tel_Aviv' date +"%Y-%m-%d %H:%M:%S"`" <my_email_address>
}

file_name="chrome_inbox_without_extension_test"
test_name="Chrome Inbox Without Extension Test"
run_selenium_test

file_name="chrome_inbox_1_with_extension_test"
test_name="Chrome Inbox 1 With Extension Test"
run_selenium_test

.....

sudo killall Xvfb >/dev/null 2>&1

if [ $start_hour = "08" ]; then
    cd /home/ubuntu
    /home/ubuntu/scripts/send_daily_report_html.sh …
Run Code Online (Sandbox Code Playgroud)

python bash firefox selenium google-chrome

6
推荐指数
1
解决办法
1万
查看次数

MySQL 中的 GROUP_CONCAT - 如何包含不同的值?

我有两张用 UNION ALL 查询的表 - 一张用于 Android,一张用于 iPhone。每个表都有自己的设备字段(“android”或“iphone”)。

我使用GROUP_CONCAT(DISTINCT `device` ORDER BY `device` SEPARATOR ', ') AS `device`了几次,每次当我按另一列(例如日期、用户 ID 等)分组时。我也使用相同的 GROUP_CONCAT 来计算总数。

问题是,当我按日期分组时,我选择设备的 GROUP_CONCAT(不是直接设备),因为有些日期同时购买了 Android 和 iPhone。选择还包括 WHERE 或 HAVING 以让用户按特定日期、加入日期的用户数量等进行过滤。当我计算总数时,我在设备上有 GROUP_CONCAT,它本身就是一个 GROUP_CONCAT 函数。结果可能类似于“android, android, iphone, iphone”,因为有只有 Android 的日期、只有 iPhone 的日期和两者都有的日期(其他查询只能有这些选项中的一个或一些)。我正在寻找一种方法将此结果转换为“android, iphone”。

目前我正在使用一个 PHP 函数:

    private function get_device_human_string($fp_device_computer_string)
    {
        $devices= array(
            'android' => 'Android',
            'iphone' => 'iPhone'
        );
        $device_computer_string= strtolower($fp_device_computer_string);
        $ret= array();
        foreach ($devices as $device_key => $device_human_string)
        {
            if (strpos($device_computer_string, $device_key) !== false)
            {
                $ret[]= $device_human_string;
            } …
Run Code Online (Sandbox Code Playgroud)

mysql sql distinct group-concat

5
推荐指数
1
解决办法
2119
查看次数