本文将带您了解关于find_by_sql呈现数组的新内容,同时我们还将为您解释findsql的相关知识,另外,我们还将为您提供关于Appiumapp自动化测试经验分享-find_element_by_
本文将带您了解关于find_by_sql呈现数组的新内容,同时我们还将为您解释find sql的相关知识,另外,我们还将为您提供关于Appium app自动化测试经验分享-find_element_by_android_uiautomator ()【二】、ARel模拟包含find_by_sql、Find_by_sql作为Rails范围、find_element_by_android_uiautomator查找元素超时的实用信息。
本文目录一览:- find_by_sql呈现数组(find sql)
- Appium app自动化测试经验分享-find_element_by_android_uiautomator ()【二】
- ARel模拟包含find_by_sql
- Find_by_sql作为Rails范围
- find_element_by_android_uiautomator查找元素超时
find_by_sql呈现数组(find sql)
我在这里遇到了一些问题,我无法发出find_by_sql请求来呈现ActiveRecord关系。确实,我需要一个activerecord关系来提出新请求:
@searches = @searches.find_by_sql(''SELECT *, COUNT( follower_id ) FROM follows GROUP BY followable_id LIMIT 0 , 3'') if params[:only_famous_projects]@project_pages = @project_pages.where(:project_id => @searches.pluck(:''followable.id'')) if params[:only_famous_projects]
没有activerecord关系,我不能使用“
pluck”。因此,我想我必须将sql请求转换为Activerecord请求。但是,一旦我在ActiveRecord上使用“计数”,我就会遇到一个巨大的问题:最后,我没有ActiveRecord关系,而是FixNum!
我不知道在哪里找到答案了,如果您能帮助我,我将不胜感激。谢谢
答案1
小编典典find_by_sql
仅当您使用调用ActiveRecord对象时,它才会返回ActiveRecord对象YourModel.find_by_sql
。
为什么不使用ActiveRecord查询界面。它在计算方面做得很好。
更新
@searches = @searches.group(:followable_id).limit(3).offset(0).count(:follower_id) if params[:only_famous_projects]
请注意,它将为您提供一个哈希值,其中包含每个哈希值的计数followable_id
。
不LIMIT 0, 3
等于LIMIT 3
吗?
Appium app自动化测试经验分享-find_element_by_android_uiautomator ()【二】
本文为博主原创,未经许可严禁转载。
本文链接:https://blog.csdn.net/zyooooxie/article/details/113868447
之前分享过 find_element_by_android_uiautomator () 【一】,最近做了些新学习,做个新分享。
个人博客:https://blog.csdn.net/zyooooxie
用法
find_element_by_android_uiautomator(uia_string)
作用:通过底层Android UiAutomator自动化测试框架定位控件。
参数:参数是UiAutomator的 UiSelector对象来定位。
官方文档 UiSelector
总结如下:
resource-id属性:
resourceId\resourceIdMatches
text属性:
text\textContains\textStartsWith\textMatches
className属性:
className\classNameMatches
description属性:
description\descriptionContains\descriptionMatches\descriptionStartsWith
fromParent:兄弟定位
Adds a child UiSelector criteria to this selector which is used to start search from the parent widget. Use this selector to narrow the search scope to sibling widgets as well all child widgets under a parent.
childSelector:父子定位
Adds a child UiSelector criteria to this selector. Use this selector to narrow the search scope to child widgets under a specific parent widget.
package属性:
packageName\packageNameMatches
index:序列【其父元素的第几个节点】
Set the search criteria to match the widget by its node index in the layout hierarchy. The index value must be 0 or greater. Using the index can be unreliable and should only be used as a last resort for matching. Instead, consider using the instance(int) method.
instance:实例【所有结果 里面的第几个元素】
Set the search criteria to match the widget by its instance number. The instance value must be 0 or greater, where the first instance is 0. For example, to simulate a user click on the third image that is enabled in a UI screen, you Could specify a a search criteria where the instance is 2, the className(String) matches the image widget class, and enabled(boolean) is true. The code would look like this: new UiSelector().className(“android.widget.ImageView”) .enabled(true).instance(2);
多说一句:正则,xxxMatches,要做到所有内容 全匹配;【在UISlector使用所有的正则表达式相关的方法中都有效】
代码
还是某Q极速版来举例;
操作流程:打开app-我-(右上角的)二维码-下方页面;
ANDROID_UIAUTOMATOR = ‘-android uiautomator’
File:page_wo.py
class PageWo(BaseMethod):
# 我
tab_wo = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().resourceId("com.csdn.zyooooxie:id/tab4")')
# 右上角的二维码
scan = (MobileBy.ANDROID_UIAUTOMATOR, 'resourceId("{}")'.format('com.csdn.zyooooxie:id/ivTitleScan'))
# 我-断言的元素
zyooooxie = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("zyooooxie")')
# 二维码-断言的元素
payment_text = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("付款")')
# 我的二维码
# text 我的二维码
# resource-id com.csdn.zyooooxie:id/ivTitleBtnLeft
# class android.widget.TextView【排序为0 故可用】
# content-desc 向上导航
# 父子节点 先定位父元素,通过父元素找儿子
# 兄弟节点 通过兄弟元素,找到同一父级元素下的子元素
# 上面是推荐的;下面是不太推荐的
# package com.csdn.zyooooxie 【包名感觉是 不单用,要组合用】
# instance int 【the first instance is 0】、【index_instance 推荐使用instance方法】
# index int 【be used as a last resort for matching】
# text\textContains\textStartsWith\textMatches
left_button_text0 = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("我的二维码")')
left_button_text1 = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().textContains("我的二")')
left_button_text2 = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().textStartsWith("我的二维")')
left_button_text3 = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().textMatches(".的.+码$")')
left_button_text4 = (MobileBy.ANDROID_UIAUTOMATOR, 'textMatches(".的.+码$")')
# resourceId\resourceIdMatches
left_button_id0 = (MobileBy.ANDROID_UIAUTOMATOR, 'resourceId("com.csdn.zyooooxie:id/ivTitleBtnLeft")')
left_button_id1 = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().resourceId("com.csdn.zyooooxie:id/ivTitleBtnLeft")')
left_button_id2 = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().resourceIdMatches("^com.+zyooooxie:id/ivTitleBtnLeft$")')
# className\classNameMatches
left_button_class0 = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().className("android.widget.TextView")')
left_button_class3 = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().classNameMatches("^android.+TextView$")')
left_button_class5 = (MobileBy.ANDROID_UIAUTOMATOR, 'className("android.widget.TextView")')
# description\descriptionContains\descriptionMatches\descriptionStartsWith
left_button_desc0 = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().description("向上导航")')
left_button_desc1 = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().descriptionContains("上导航")')
left_button_desc2 = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().descriptionMatches("^向.+航$")')
left_button_desc3 = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().descriptionStartsWith("向上导")')
left_button_desc5 = (MobileBy.ANDROID_UIAUTOMATOR, 'description("向上导航")')
# fromParent:兄弟定位
brother0 = ('-android uiautomator', 'resourceId("com.csdn.zyooooxie:id/qrcode_scanner_imageview").fromParent(resourceId("com.csdn.zyooooxie:id/qrcode_scanner_text"))')
brother1 = ('-android uiautomator', 'new UiSelector().resourceId("com.csdn.zyooooxie:id/qrcode_group_charge_layout").fromParent(new UiSelector().resourceId("com.csdn.zyooooxie:id/qrcode_group_payment_layout"))')
# childSelector:父子定位
child0 = (MobileBy.ANDROID_UIAUTOMATOR, 'resourceId("com.csdn.zyooooxie:id/rlCommenTitle").childSelector(className("android.widget.TextView"))')
child1 = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().resourceId("com.csdn.zyooooxie:id/group_qrcode_charge_paymen_layout").childSelector(description("扫一扫"))')
# instance 和 index 都是从0开始计数,
# index: 后续定位方式是其本身 + index是其父元素的第几个节点
index0 = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().index(1).resourceId("com.csdn.zyooooxie:id/qrcode_group_charge_layout")')
index1 = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().index(3).resourceId("com.csdn.zyooooxie:id/qrcode_group_payment_layout")')
index2 = (MobileBy.ANDROID_UIAUTOMATOR, 'index(5).resourceId("com.csdn.zyooooxie:id/qrcode_scanner_layout")')
index3 = (MobileBy.ANDROID_UIAUTOMATOR, 'index(1).text("扫一扫")')
index4 = (MobileBy.ANDROID_UIAUTOMATOR, 'index(1).description("zyooooxie,扫一扫二维码,加我QQ。")')
# instance:匹配的所有结果 里面的第几个元素
instance0 = ('-android uiautomator', 'new UiSelector().instance(0).className("android.widget.TextView")')
instance1 = ('-android uiautomator', 'new UiSelector().instance(1).classNameMatches(".+TextView$")')
instance2 = ('-android uiautomator', 'instance(2).className("android.widget.TextView")')
instance3 = ('-android uiautomator', 'instance(3).classNameMatches(".+TextView$")')
instance10 = ('-android uiautomator', 'instance(2).className("android.widget.ImageView")')
instance11 = ('-android uiautomator', 'new UiSelector().instance(0).className("android.widget.ImageView")')
instance12 = ('-android uiautomator', 'new UiSelector().instance(3).classNameMatches("^android.+geView$")')
instance13 = ('-android uiautomator', 'instance(1).classNameMatches("^android.+geView$")')
# packageName\packageNameMatches
left_button_package0 = ('-android uiautomator', 'new UiSelector().packageName("com.csdn.zyooooxie").text("我的二维码")')
left_button_package1 = ('-android uiautomator', 'packageName("com.csdn.zyooooxie").resourceId("com.csdn.zyooooxie:id/ivTitleBtnLeft")')
left_button_package2 = ('-android uiautomator', 'new UiSelector().packageName("com.csdn.zyooooxie").description("向上导航")')
left_button_package10 = ('-android uiautomator', 'new UiSelector().packageNameMatches("com.+zyooooxie").textContains("的二维")')
left_button_package11 = ('-android uiautomator', 'packageNameMatches("^com.+zyooooxie").className("android.widget.TextView")')
left_button_package12 = ('-android uiautomator', 'new UiSelector().packageNameMatches("com.+zyooooxie$").descriptionStartsWith("向上")')
fail_package20 = ('-android uiautomator', 'new UiSelector().packageName("000.11111111.222222").descriptionStartsWith("向上")')
fail_package21 = ('-android uiautomator', 'new UiSelector().packageNameMatches("111.+22222").textContains("的二维")')
def QR_code(self, driver):
self.element_click(driver, *self.tab_wo)
self.element_click(driver, *self.scan)
pytest.ini 文件:
@File:test_wo.py
class TestWo(PageWo):
@pytest.mark.mark_text
def test_text_0(self, driver):
self.QR_code(driver)
print(self.left_button_text0)
self.element_click(driver, *self.left_button_text0)
self.assert_FindElement(driver, *self.zyooooxie, the_time=5)
@pytest.mark.mark_text
def test_text_1(self, driver):
self.QR_code(driver)
print(self.left_button_text1)
self.element_click(driver, *self.left_button_text1)
self.assert_FindElement(driver, *self.zyooooxie, the_time=5)
@pytest.mark.mark_text
def test_text_2(self, driver):
self.QR_code(driver)
print(self.left_button_text2)
self.element_click(driver, *self.left_button_text2)
self.assert_FindElement(driver, *self.zyooooxie, the_time=5)
@pytest.mark.mark_text
def test_text_3(self, driver):
self.QR_code(driver)
print(self.left_button_text3)
self.element_click(driver, *self.left_button_text3)
self.assert_FindElement(driver, *self.zyooooxie, the_time=5)
@pytest.mark.mark_text
def test_text_4(self, driver):
self.QR_code(driver)
print(self.left_button_text4)
self.element_click(driver, *self.left_button_text4)
self.assert_FindElement(driver, *self.zyooooxie, the_time=5)
@pytest.mark.mark_id
def test_id_0(self, driver):
self.QR_code(driver)
print(self.left_button_id0)
self.element_click(driver, *self.left_button_id0)
self.assert_FindElement(driver, *self.zyooooxie, the_time=5)
@pytest.mark.mark_id
def test_id_1(self, driver):
self.QR_code(driver)
print(self.left_button_id1)
self.element_click(driver, *self.left_button_id1)
self.assert_FindElement(driver, *self.zyooooxie, the_time=5)
@pytest.mark.mark_id
def test_id_2(self, driver):
self.QR_code(driver)
print(self.left_button_id2)
self.element_click(driver, *self.left_button_id2)
self.assert_FindElement(driver, *self.zyooooxie, the_time=5)
@pytest.mark.mark_class
def test_class_0(self, driver):
self.QR_code(driver)
print(self.left_button_class0)
self.element_click(driver, *self.left_button_class0)
self.assert_FindElement(driver, *self.zyooooxie, the_time=5)
@pytest.mark.mark_class
def test_class_3(self, driver):
self.QR_code(driver)
print(self.left_button_class3)
self.element_click(driver, *self.left_button_class3)
self.assert_FindElement(driver, *self.zyooooxie, the_time=5)
@pytest.mark.mark_class
def test_class_5(self, driver):
self.QR_code(driver)
print(self.left_button_class5)
self.element_click(driver, *self.left_button_class5)
self.assert_FindElement(driver, *self.zyooooxie, the_time=5)
@pytest.mark.mark_desc
def test_desc_0(self, driver):
self.QR_code(driver)
print(self.left_button_desc0)
self.element_click(driver, *self.left_button_desc0)
self.assert_FindElement(driver, *self.zyooooxie, the_time=5)
@pytest.mark.mark_desc
def test_desc_1(self, driver):
self.QR_code(driver)
print(self.left_button_desc1)
self.element_click(driver, *self.left_button_desc1)
self.assert_FindElement(driver, *self.zyooooxie, the_time=5)
@pytest.mark.mark_desc
def test_desc_2(self, driver):
self.QR_code(driver)
print(self.left_button_desc2)
self.element_click(driver, *self.left_button_desc2)
self.assert_FindElement(driver, *self.zyooooxie, the_time=5)
@pytest.mark.mark_desc
def test_desc_3(self, driver):
self.QR_code(driver)
print(self.left_button_desc3)
self.element_click(driver, *self.left_button_desc3)
self.assert_FindElement(driver, *self.zyooooxie, the_time=5)
@pytest.mark.mark_desc
def test_desc_5(self, driver):
self.QR_code(driver)
print(self.left_button_desc5)
self.element_click(driver, *self.left_button_desc5)
self.assert_FindElement(driver, *self.zyooooxie, the_time=5)
@pytest.mark.mark_index_instance
def test_index_0(self, driver):
self.QR_code(driver)
self.assert_FindElement(driver, *self.payment_text, the_time=5)
print(self.index0)
attr_name = self.driver_find_element_and_wait(driver, *self.index0).get_attribute("name")
print(attr_name)
name = '收款'
assert attr_name == name
@pytest.mark.mark_index_instance
def test_index_1(self, driver):
self.QR_code(driver)
self.assert_FindElement(driver, *self.payment_text, the_time=5)
print(self.index1)
attr_name = self.driver_find_element_and_wait(driver, *self.index1).get_attribute("name")
print(attr_name)
name = '付款'
assert attr_name == name
@pytest.mark.mark_index_instance
def test_index_2(self, driver):
self.QR_code(driver)
self.assert_FindElement(driver, *self.payment_text, the_time=5)
print(self.index2)
attr_name = self.driver_find_element_and_wait(driver, *self.index2).get_attribute("name")
print(attr_name)
name = '扫一扫'
assert attr_name == name
@pytest.mark.mark_index_instance
def test_index_3(self, driver):
self.QR_code(driver)
self.assert_FindElement(driver, *self.payment_text, the_time=5)
print(self.index3)
attr_id = self.driver_find_element_and_wait(driver, *self.index3).get_attribute("resourceId")
print(attr_id)
assert_id = 'com.csdn.zyooooxie:id/qrcode_scanner_text'
assert assert_id == attr_id
@pytest.mark.mark_index_instance
def test_index_4(self, driver):
self.QR_code(driver)
self.assert_FindElement(driver, *self.payment_text, the_time=5)
print(self.index4)
attr_class = self.driver_find_element_and_wait(driver, *self.index4).get_attribute("className")
print(attr_class)
assert 'android.widget.ImageView' == attr_class
@pytest.mark.mark_index_instance
def test_instance_0(self, driver):
self.QR_code(driver)
self.assert_FindElement(driver, *self.payment_text, the_time=5)
print(self.instance0)
attr_text = self.driver_find_element_and_wait(driver, *self.instance0).get_attribute("text")
print(attr_text)
text = '我的二维码'
assert attr_text == text
@pytest.mark.mark_index_instance
def test_instance_1(self, driver):
self.QR_code(driver)
self.assert_FindElement(driver, *self.payment_text, the_time=5)
print(self.instance1)
attr_text = self.driver_find_element_and_wait(driver, *self.instance1).get_attribute("text")
print(attr_text)
text = '收款'
assert attr_text == text
@pytest.mark.mark_index_instance
def test_instance_2(self, driver):
self.QR_code(driver)
self.assert_FindElement(driver, *self.payment_text, the_time=5)
print(self.instance2)
attr_text = self.driver_find_element_and_wait(driver, *self.instance2).get_attribute("text")
print(attr_text)
text = '付款'
assert attr_text == text
@pytest.mark.mark_index_instance
def test_instance_3(self, driver):
self.QR_code(driver)
self.assert_FindElement(driver, *self.payment_text, the_time=5)
print(self.instance3)
attr_text = self.driver_find_element_and_wait(driver, *self.instance3).get_attribute("text")
print(attr_text)
text = '扫一扫'
assert attr_text == text
@pytest.mark.mark_index_instance
def test_instance_10(self, driver):
self.QR_code(driver)
self.assert_FindElement(driver, *self.payment_text, the_time=5)
print(self.instance10)
attr_id = self.driver_find_element_and_wait(driver, *self.instance10).get_attribute("resourceId")
print(attr_id)
res_id = 'com.csdn.zyooooxie:id/qrcode_group_payment_imageview'
assert attr_id == res_id
@pytest.mark.mark_index_instance
def test_instance_11(self, driver):
self.QR_code(driver)
self.assert_FindElement(driver, *self.payment_text, the_time=5)
print(self.instance11)
attr_id = self.driver_find_element_and_wait(driver, *self.instance11).get_attribute("resourceId")
print(attr_id)
res_id = 'com.csdn.zyooooxie:id/qrcode_card_body'
assert attr_id == res_id
@pytest.mark.mark_index_instance
def test_instance_12(self, driver):
self.QR_code(driver)
self.assert_FindElement(driver, *self.payment_text, the_time=5)
print(self.instance12)
attr_id = self.driver_find_element_and_wait(driver, *self.instance12).get_attribute("resourceId")
print(attr_id)
res_id = 'com.csdn.zyooooxie:id/qrcode_scanner_imageview'
assert attr_id == res_id
@pytest.mark.mark_index_instance
def test_instance_13(self, driver):
self.QR_code(driver)
self.assert_FindElement(driver, *self.payment_text, the_time=5)
print(self.instance13)
attr_id = self.driver_find_element_and_wait(driver, *self.instance13).get_attribute("resourceId")
print(attr_id)
res_id = 'com.csdn.zyooooxie:id/qrcode_group_charge_imageview'
assert attr_id == res_id
@pytest.mark.mark_package
def test_package_0(self, driver):
self.QR_code(driver)
print(self.left_button_package0)
self.element_click(driver, *self.left_button_package0)
self.assert_FindElement(driver, *self.zyooooxie, the_time=5)
@pytest.mark.mark_package
def test_package_1(self, driver):
self.QR_code(driver)
print(self.left_button_package1)
self.element_click(driver, *self.left_button_package1)
self.assert_FindElement(driver, *self.zyooooxie, the_time=5)
@pytest.mark.mark_package
def test_package_2(self, driver):
self.QR_code(driver)
print(self.left_button_package2)
self.element_click(driver, *self.left_button_package2)
self.assert_FindElement(driver, *self.zyooooxie, the_time=5)
@pytest.mark.mark_package
def test_package_3(self, driver):
self.QR_code(driver)
print(self.left_button_package10)
self.element_click(driver, *self.left_button_package10)
self.assert_FindElement(driver, *self.zyooooxie, the_time=5)
@pytest.mark.mark_package
def test_package_4(self, driver):
self.QR_code(driver)
print(self.left_button_package11)
self.element_click(driver, *self.left_button_package11)
self.assert_FindElement(driver, *self.zyooooxie, the_time=5)
@pytest.mark.mark_package
def test_package_5(self, driver):
self.QR_code(driver)
print(self.left_button_package12)
self.element_click(driver, *self.left_button_package12)
self.assert_FindElement(driver, *self.zyooooxie, the_time=5)
@pytest.mark.mark_package
def test_package_6(self, driver):
self.QR_code(driver)
print(self.fail_package20)
self.element_click(driver, *self.fail_package20)
self.assert_FindElement(driver, *self.zyooooxie, the_time=5)
@pytest.mark.mark_package
def test_package_7(self, driver):
self.QR_code(driver)
print(self.fail_package21)
self.element_click(driver, *self.fail_package21)
self.assert_FindElement(driver, *self.zyooooxie, the_time=5)
@pytest.mark.mark_child_parent
def test_parent0(self, driver):
self.QR_code(driver)
print(self.brother0)
# text有值、content-desc无值
print(self.driver_find_element_and_wait(driver, *self.brother0).get_attribute("text"))
self.assert_FindElement(driver, *self.payment_text, the_time=5)
@pytest.mark.mark_child_parent
def test_parent1(self, driver):
self.QR_code(driver)
print(self.brother1)
# content-desc有值、text无值
print(self.driver_find_element_and_wait(driver, *self.brother1).get_attribute("name"))
self.assert_FindElement(driver, *self.payment_text, the_time=5)
@pytest.mark.mark_child_parent
def test_child0(self, driver):
self.QR_code(driver)
print(self.child0)
self.element_click(driver, *self.child0)
self.assert_FindElement(driver, *self.zyooooxie, the_time=5)
@pytest.mark.mark_child_parent
def test_child1(self, driver):
self.QR_code(driver)
print(self.child1)
self.assert_FindElement(driver, *self.payment_text, the_time=5)
self.element_click(driver, *self.child1)
if __name__ == '__main__':
# pytest.main(['-s', '-v', 'test_wo.py', '-m', 'mark_id or mark_text'])
# pytest.main(['-s', '-v', 'test_wo.py', '-m', 'mark_index_instance'])
# pytest.main(['-s', '-v', 'test_wo.py'])
pytest.main(['-v', 'test_wo.py', '--reruns', '2', '--reruns-delay', '5'])
执行结果
交流技术 欢迎+QQ 153132336 zy
个人博客 https://blog.csdn.net/zyooooxie
ARel模拟包含find_by_sql
我有一个相当复杂的SQL查询,我敢肯定我无法使用ARel(Rails
3.0.10)完成
看看链接,但是它有一些联接和一个where exists
子句,而且我敢肯定对于ARel来说太复杂了。
但是我的问题是,在此查询如此复杂之前,我可以使用ARelincludes
添加其他模型来避免n +
1问题。现在,我正在使用find_by_sql,includes
请不要使用。我仍然希望能够获取这些记录并将它们附加到我的模型实例includes
上,但是确实不知道如何实现。
有人可以指出我正确的方向吗?
我还没有尝试将它们加入同一查询中。我只是不确定如何将它们映射到对象(即ActiveRecord是否可以将它们正确映射到适当的类)
我知道使用includes
ActiveRecord时实际上会进行第二次查询,然后以某种方式将这些行附加到原始查询的相应实例中。有人可以指导我如何做吗?还是我需要加入相同的查询?
Find_by_sql作为Rails范围
Sitepoint的r937足以帮助我确定需要从数据库返回正确结果的查询。
我需要的是能够将此查询用作作用域,并能够将其他作用域链接到该作用域。
查询是:
SELECT coasters.*
FROM (
SELECT order_ridden,MAX(version) AS max_version
FROM coasters
GROUP BY order_ridden
) AS m
INNER JOIN coasters
ON coasters.order_ridden = m.order_ridden
AND COALESCE(coasters.version,0) = COALESCE(m.max_version,0)
我试图使像这样的范围:
scope :uniques,lambda {
find_by_sql('SELECT coasters.*
FROM (
SELECT order_ridden,MAX(version) AS max_version
FROM coasters
GROUP BY order_ridden
) AS m
INNER JOIN coasters
ON coasters.order_ridden = m.order_ridden
AND COALESCE(coasters.version,0)')
}
但是,当我尝试将另一个示波器链接到它时,它失败了。有没有办法像正常作用域一样运行此查询?
find_element_by_android_uiautomator查找元素超时
困惑了两天的问题,原来是单引号和双引号问题,欠缺考虑到Java的格式
Traceback (most recent call last):
File "D:/Python/PycharmProjects/ketang/test_s/test4.py", line 34, in <module>
webdriverwait(driver, 20).until(EC.visibility_of_element_located((MobileBy.ANDROID_UIAUTOMATOR, loc)))
File "D:\Python\python37\lib\site-packages\selenium\webdriver\support\wait.py", line 80, in until
raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:
原代码:
更改后:
loc = 'new UiSelector().text("已有账号?立即登录")' webdriverwait(driver, 20).until(EC.visibility_of_element_located((MobileBy.ANDROID_UIAUTOMATOR, loc))) driver.find_element_by_android_uiautomator(loc).click()
今天关于find_by_sql呈现数组和find sql的介绍到此结束,谢谢您的阅读,有关Appium app自动化测试经验分享-find_element_by_android_uiautomator ()【二】、ARel模拟包含find_by_sql、Find_by_sql作为Rails范围、find_element_by_android_uiautomator查找元素超时等更多相关知识的信息可以在本站进行查询。
本文标签: